package com.william.jdbcplus.boot.test.dao;

import com.william.jdbcplus.boot.test.entity.SysDict;
import com.william.jdbcplus.boot.test.vo.CheckVo;
import com.william.jdbcplus.boot.test.vo.DictQueryVO;
import com.william.jdbcplus.boot.test.vo.DictVO;
import com.william.jdbcplus.boot.test.vo.TreeSelectVO;
import com.william.jdbcplus.common.page.Page;

import java.util.List;
import java.util.Map;

public interface SysDictDao {
    /**
     * 重复检查SQL
     *
     * @return
     */
    Long duplicateCheckCountSql(CheckVo checkVo);

    Long duplicateCheckCountSqlNoDataId(CheckVo checkVo);

    List<DictVO> queryDictItemsByCode(String code);

    List<DictVO> queryTableDictItemsByCode(String table, String text, String code);

    List<DictVO> queryTableDictItemsByCodeAndFilter(String table, String text, String code, String filterSql);

    String queryDictTextByKey(String code, String key);

    String queryTableDictTextByKey(String table, String text, String code, String key);

    List<DictVO> queryTableDictByKeys(String table, String text, String code, String[] keyArray);

    /**
     * 查询所有部门 作为字典信息 id -->value,departName -->text
     *
     * @return
     */
    List<DictVO> queryAllDepartBackDictModel();

    /**
     * 查询所有用户  作为字典信息 username -->value,realname -->text
     *
     * @return
     */
    List<DictVO> queryAllUserBackDictModel();

    /**
     * 通过关键字查询出字典表
     *
     * @param table
     * @param text
     * @param code
     * @param keyword
     * @return
     */
    List<DictVO> queryTableDictItems(String table, String text, String code, String keyword);

    /**
     * 根据表名、显示字段名、存储字段名 查询树
     *
     * @param table
     * @param text
     * @param code
     * @param pid
     * @param hasChildField
     * @return
     */
    List<TreeSelectVO> queryTreeList(Map<String, String> query, String table, String text, String code, String pidField, String pid, String hasChildField);

    /**
     * 删除
     *
     * @param id
     */
    void deleteOneById(String id);

    /**
     * 查询被逻辑删除的数据
     *
     * @return
     */
    List<SysDict> queryDeleteList();

    /**
     * 修改状态值
     *
     * @param delFlag
     * @param id
     */
    void updateDictDelFlag(int delFlag, String id);


    /**
     * 分页查询字典表数据
     *
     * @param page
     * @param query
     * @return
     */
    Page<DictVO> queryDictTablePageList(Page page, DictQueryVO query);
}
